//
// Created by Criinal Nicole on 2020/6/17.
// 定义INode块
//

#ifndef FILESYSTEM_FILEINDEXNODE_H
#define FILESYSTEM_FILEINDEXNODE_H

namespace FILE_INDEX_NODE {
//    最大INode数量
    const int MAX_FILE_INDEX_NUM = 1024;

//    每个INode节点对应的最大节点数
    const int MAX_BLOCK_NUM = 4;

//    最长允许名字长度
    const int MAX_NAME_SIZE = 32;

    class FileIndexNode {
    public:

//        分配标志
        int _iAlloc{0};

//        间接参照
        int _iLarge{0};

//        文件/目录名称
        char _Name[MAX_NAME_SIZE];

//        关联的文件数
        int _blockNum{0};

//        如果是文件，就是对应的储存块号，如果是间接参照，那么最后一个位置表示下一个INode点的位置
//        如果是目录，就是对应的下级iNode号，如果是间接参照，那么最后一个位置表示下一个INode点的位置
        int _blockId[MAX_BLOCK_NUM];

//        创建用户Id
        int _userId{0};

//        拥有者权限
        int _ownerPri{7};

//        其他人的权限
        int _othersPri{0};

//        下一个INode的位置
        int _nextInode{-1};

//        在基本文件目录中的位置，仅针对目录而言
//        非目录文件的该值为-1
        int _posInDictionaryBlock{-1};

    };

//    INode序列
    extern FileIndexNode fileIndexNodes[MAX_FILE_INDEX_NUM];

    void init();

}


#endif //FILESYSTEM_FILEINDEXNODE_H
